interface labelObjTpye {
  label: string;
}
function getLabel(labelObj: labelObjTpye): void {
  console.log(labelObj.label);
}

// 这种方式调用不会报 类型错误
let labelObj = { label: "1234", name: 1234 };
getLabel(labelObj);

// 但是下面这种会
getLabel({ label: "1234", name: 1234 });


// Q:为什么赋值就使得类型检测变得宽松了? --待补充
// 引用 https://juejin.cn/post/7003171767560716302#heading-11
/**
 * 所谓的鸭式辨型法就是像鸭子一样走路并且嘎嘎叫的就叫鸭子，即具有鸭子特征的认为它就是鸭子
 * 也就是通过制定规则来判定对象是否实现这个接口(当然在TS里面不这样说)。
    上面代码，在参数里写对象就相当于是直接给labeledObj赋值，这个对象有严格
    的类型定义，所以不能多参或少参。而当你在外面将该对象用另一个变量myObj接收
    myObj不会经过额外属性检查，但会根据类型推论为
    let myObj: { size: number; label: string } = { size: 10, label: "Size 10 Object" };
    然后将这个myObj再赋值给labeledObj，此时根据类型的兼容性，两种类型对象，参照鸭式辨型法，
    因为都具有label属性，所以被认定为两个相同，故而可以用此法来绕开多余的类型检查
 */
export {};
